python 简单计算器递归算法 多层括号处理

用python编写一个简单计算器

计算器开发需求 实现加减乘除及拓号优先级解析 用户输入 # 1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) ) # 等类似算式后,必须自己解析里面的(),+,-,*,/符号和公式,利用递归算法

拿到这个题目时,感觉无从下手。老师说利用开学来3天学习的知识是可以做出来的。然后我认真归纳总结前3天学习的基础知识,经过3天3夜的奋战终于给弄出来了。虽然中途也有想过放弃,但是没有耕耘哪来的收获。如果初学的同学想借鉴的话, 建议自己先仔细想想,如果实在无从下手可以参考下我的。特写此文以自勉。程序中可能出现很多冗余或bug,望勿见笑。下面我先说说我的思路。

  1. 先构造几个函数方法用来进行最初的运算(加减乘除)
  2. 在运算函数中,先传入一个字符串,将字符串利用正则表达式,findall函数生成可以取元素的列表形式,利用返回值,
  3. 先进行加法和减法运算,加减法能顺利通过验证,结果无误
  4. 在算式中增加乘法和除法,用if语句进行判断,如果有乘法和除法,需优先进行计算,通过验证后
  5. 在算式中增加括号,增加括号后,需要进行for循环遍历,如果遍历的元素中包含括号,则优先处理计算括号里面的
  6. 利用列表临时存储返回值,赋给原来的算式,进行递归,这样算式越来越精简。最终得出结果。

简单流程图如下:
计算器运算简单流程图

以下是实现代码:

#!/usr/bin/env python
#-*-coding:utf-8 -*-

import re
# 定义函数
def add(x , y): #相加
    return x + y
def subtract(x, y): #相减
    return x - y
def multiply(x, y):  #相乘
    return x * y
def divide(x, y): #相除
    return x / y

temp=[0] #定义一个临时列表,并且赋值0,用来存储结果
temp1=[] #定义一个临时列表,用来临时存储列表
def sum2(ret):  #定义一个函数用来进行数据的处理,运算
    for index,mark in enumerate(ret):  #遍历列表,赋值给mark
        if  str(mark).count("(")==1 and str(mark).startswith("("):  #如果mark中包含“(”并且以其开头
            ret.pop(index)  #将该值(mark),在列表中移除
            mark1=re.findall('^\(\-[0-9.]+|[0-9.]+|[*/+]|[-]',mark)  #将mark元素,再次生成列表
            h = float(re.sub('\(', '', mark1.pop(0)))  #将该表的第一个元素取出,并且将其中所包含的括号替换移除
            mark1.insert(
  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值